function person(a, b, c) {
    console.log(this.name)
    console.log(a, b, c)
}

var egg = { name: '蛋老师' }

Function.prototype.newBind = function (context) {
    if (typeof this !== 'function') {
      throw new TypeError('Error')
    }
    const that = this
    const args = [...arguments].slice(1)
    // 返回一个函数
    return function F() {
      // 因为返回了一个函数，我们可以 new F()，所以需要判断
      if (this instanceof F) {
        return new that(...args, ...arguments)
      }
      return that.apply(context, args.concat(...arguments))
    }
  }


// person.newBind(egg, '点赞', '投币')('充电')
var bibi = person.newBind(egg, '点赞', '投币')
bibi()
// var b = new bibi('充电')
